package com.postek.coyote.postekwifi;

import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;


/**
 * Created by Administrator on 2016/11/23 0023.
 */
//建立一个统一的dialog  使用Build 模式
//build是建造者模式  在环境很复杂 有多个对象的时候使用
public class CursorDialog extends Dialog{
    //在很多时候dialog要设置全屏 有的 时候要设置为浮动窗口

    public CursorDialog(Context context) {
        super(context);
    }

    private CursorDialog(Context context, int themeResId) {
        super(context, themeResId);
    }
    //加载一个异步任务 (需要一个任务和一个回调监听)
    public void task(final Runnable run, final Callback callback){
        //1、开始做任务
        //不能直接把run丢进去 因为这样不知道什么时候结束
        new Thread(){
            @Override
            public void run() {
                run.run();//在这里执行 就是子线程了
                if (callback!=null)
                callback.onTaskFiish();
            }
        }.start();
    }
    //2、通过show去打开dialog
    //传入时间就是为了线程等待  (延迟关闭)
    public void show(final int time) {
        super.show();
        //2、2
        final Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                dismiss();
            }
        };
        //2、1
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //2、2
                //关闭dialog  但是dialog绝对是一个主线程  所以要用handler来关闭
                handler.sendEmptyMessage(1);
            }
        }.start();
    }

    public interface Callback{
        void onTaskFiish();
        //把此接口强行注入task
    }



  public  static class Builder{
      private final Context mcontext;
      //3、还需要传递的参数
      //dialog 是否全屏  默认不全屏 是浮动的

      private boolean  isFloating;//浮动 窗口化
      private String  title;
      private  boolean isFull;


      //4、
      private View layout;
      public Builder setlayout(int res){
     layout=View.inflate(mcontext,res,null);
          return  this;
      }


      //设置点击事件
      public Builder setViewClick(int id, View.OnClickListener listener){
          View view=layout.findViewById(id);
          view.setOnClickListener(listener);
          return  this;
      }
      //里面有ListView的设置Item点击事件
      public Builder setItemClick(int id, AdapterView.OnItemClickListener listener){
          View view =layout.findViewById(id);
          if (view instanceof AdapterView){
              AdapterView v= (AdapterView) view;
              v.setOnItemClickListener(listener);
          }
          return  this;
      }





      public Builder setView(View view){
          layout=view;
          return  this;
      }



      public Builder notFloating(){
          isFloating=true;
          return this;
      }
      public Builder setTile(String title){
          this.title=title;
          return  this;
      }
      public Builder full(){
          isFull=true;
          isFloating=false;
          return this;
      }



       //2、构造方法   传参
      public  Builder (Context context){
          this.mcontext=context;
      }

      //1、建立一个返回dialog的方法   既然能在这里返回 则上面的方法要设为私有  不对外公开
      public CursorDialog bilder(){
          CursorDialog dialog;
          if (isFloating){
              if (TextUtils.isEmpty(title)){
                  //去掉title----->建立样式---->style
                  dialog=new CursorDialog(mcontext, R.style.CursorDialogIsFloatNoTitle);
              }else{
                  dialog=new CursorDialog(mcontext,R.style.CursorDialogIsFloat);
              }
          }else {
              if (TextUtils.isEmpty(title)){
                  dialog=new CursorDialog(mcontext,R.style.CursorDialogIsFulltNoTitle);
              }else {
                  dialog=new CursorDialog(mcontext,R.style.CursorDialogIsFullt);
              }
          }

          //5、给dialog设置view
          if (layout==null){
              throw new IllegalArgumentException("View 不能为空");
          }
          dialog.setContentView(layout);




          return dialog;
          //一个dialog必须要有一个view
      }
  }


}
